package frpc.manager.basics;

import org.springframework.data.redis.connection.DataType;

import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

/**
 * 接口描述:  Redis处理抽象接口
 *
 * @author 王雷
 * @version 1.0.0
 * @date 2020/11/26 0026 下午 3:51
 */
public interface IRedisBusinessManager {

    /**
     * 功能描述：指定缓存失效时间
     *
     * @param key  目标Key
     * @param time 时间——单位：秒
     * @author : 王雷
     * @date : 2019/9/10 0010 下午 2:27
     */
    void expire(String key, long time);

    /**
     * 功能描述：指定缓存失效时间
     *
     * @param key      目标Key
     * @param time     时间——单位：秒
     * @param timeUnit 时间单位；默认：秒
     * @author : 王雷
     * @date : 2019/9/10 0010 下午 2:27
     */
    void expire(String key, long time, TimeUnit timeUnit);

    /**
     * 功能描述：获取对象的类型
     *
     * @param key      目标Key
     * @author : 王雷
     * @date : 2019/9/10 0010 下午 2:27
     */
    DataType giveTypeToKey(String key);

    /**
     * 根据key 获取过期时间
     *
     * @param key 键 不能为null
     * @return 时间(秒) 返回0代表为永久有效
     */
    Long getExpire(String key);

    /**
     * 判断key是否存在
     *
     * @param key 键
     * @return true 存在 false不存在
     */
    Boolean hasKey(String key);

    /**
     * 删除缓存
     *
     * @param key 可以传一个值 或多个
     */
    void del(String... key);

    /**
     * 删除缓存
     *
     * @param keys key集合
     */
    void del(List<String> keys);

    /**
     * 获取所有的Key
     *
     * @return 当前Redis中存放的所有Key；
     * @author 王雷    (2018年3月2日 下午3:49:45)
     */
    Set<String> readKeys(String keyTitle);

    /**
     * 获取所有的Key
     *
     * @author 王雷    (2018年3月2日 下午3:49:45)
     */
    Set<String> readKeys();
}
